﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;

namespace DiscoveryLogic.DataViz.NetworkDiagram.Layouts
{
    /// <summary>
    /// 
    /// </summary>
    public class EnergyBasedLayout:IGraphLayout
    {
        #region Implementation of IGraphLayout

        public event OnGraphUpdated GraphUpdated;
        public event OnGraphLayoutFinished GraphLayoutFinished;

        /// <summary>
        /// 
        /// </summary>
        public GraphLayoutAlgorithm LayoutAlgorithm
        {
            get { throw new System.NotImplementedException(); }
            set { throw new System.NotImplementedException(); }
        }

        /// <summary>
        /// 
        /// </summary>
        public int MaxIteration
        {
            get { throw new System.NotImplementedException(); }
            set { throw new System.NotImplementedException(); }
        }

        /// <summary>
        /// 
        /// </summary>
        public SizeF GraphSize
        {
            get { throw new System.NotImplementedException(); }
            set { throw new System.NotImplementedException(); }
        }

        /// <summary>
        /// 
        /// </summary>
        public Color BackgroundColor
        {
            get { throw new System.NotImplementedException(); }
            set { throw new System.NotImplementedException(); }
        }

        /// <summary>
        /// 
        /// </summary>
        public Dictionary<Guid, Vertice> Vertices
        {
            get { throw new System.NotImplementedException(); }
            set { throw new System.NotImplementedException(); }
        }

        /// <summary>
        /// 
        /// </summary>
        public Dictionary<Guid, Edge> Edges
        {
            get { throw new System.NotImplementedException(); }
            set { throw new System.NotImplementedException(); }
        }

        /// <summary>
        /// 
        /// </summary>
        public bool ShowVerticeLabels
        {
            get { throw new System.NotImplementedException(); }
            set { throw new System.NotImplementedException(); }
        }

        /// <summary>
        /// 
        /// </summary>
        public bool ShowEdgeDistances
        {
            get { throw new System.NotImplementedException(); }
            set { throw new System.NotImplementedException(); }
        }

        /// <summary>
        /// 
        /// </summary>
        public double DistanceThreshold
        {
            get { throw new System.NotImplementedException(); }
            set { throw new System.NotImplementedException(); }
        }

        /// <summary>
        /// 
        /// </summary>
        public int DistancePercentileCutoff
        {
            get { throw new System.NotImplementedException(); }
            set { throw new System.NotImplementedException(); }
        }

        /// <summary>
        /// 
        /// </summary>
        public bool IsStopped
        {
            get
            {
                throw new System.NotImplementedException();
            }
        }

        /// <summary>
        /// rendered image
        /// </summary>
        public Image Diagram
        {
            get
            {
                throw new System.NotImplementedException();
            }
        }

        /// <summary>
        /// 
        /// </summary>
        public List<Vertice> SelectedVertices
        {
            get { throw new System.NotImplementedException(); }
        }

        /// <summary>
        /// 
        /// </summary>
        public List<Edge> SelectedEdges
        {
            get { throw new System.NotImplementedException(); }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="graphSize"></param>
        /// <param name="g"></param>
        public void Init(SizeF graphSize, Graph g)
        {
            throw new System.NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        public void StartRender(bool asyncMode)
        {
            throw new System.NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        public void StopRender()
        {
            throw new System.NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        public void UpdateImage()
        {
            throw new System.NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        public void ContinueLayout()
        {
            throw new System.NotImplementedException();
        }

        /// <summary>
        /// vertice got hightlight color (Darker or Lighter dependent on background color)
        /// label is displayed in bold font
        /// </summary>
        /// <param name="mousePos"></param>
        /// <returns></returns>
        public Vertice SelectVertice(PointF mousePos)
        {
            throw new System.NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="v"></param>
        /// <param name="mousePos"></param>
        public void DragVertice(Vertice v, PointF mousePos)
        {
            throw new System.NotImplementedException();
        }

        /// <summary>
        /// clear any selected vertices or edges
        /// </summary>
        public void UnSelect()
        {
            throw new System.NotImplementedException();
        }

        /// <summary>
        /// when edge is selected, both edge and its connected vertices got highlighted
        /// and label is displayed in bold font 
        /// </summary>
        /// <param name="mousePos"></param>
        /// <returns></returns>
        public Edge SelectEdge(PointF mousePos)
        {
            throw new System.NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="regionOfInterest"></param>
        public void Select(RectangleF regionOfInterest)
        {
            throw new System.NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="vIDs"></param>
        public void SelectVertices(List<Guid> vIDs)
        {
            throw new System.NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="eIDs"></param>
        public void SelectEdges(List<Guid> eIDs)
        {
            throw new System.NotImplementedException();
        }

        #endregion
    }
}
